package object2;

/**
 * Object类方法详解
 */
public class ObjectMethod {

    public static void main(String[] args) {

        /*
            ==是比较运算符
            1)既可以判断基本类型，又可以判断引用类型
            2)如果判断基本类型，判断的是值是否相等
            3)如果判断引用类型，判断的是地址是否相等，即判定是不是同一个对象

            equals是Object类中的方法，只能判断引用类型
            1)默认判断的是地址是否相等
            2)子类中往往重写该方法，用于判断内容是否相等
         */

        T1 t1 = new T1();
        T1 t2 = t1;
        T1 t3 = t2;

        System.out.println(t1 == t3);//true 引用类型比较地址，都指向t1
        System.out.println(t2 == t3);//true

        T2 t21 = t1;//向上转型，t21指向t1
        System.out.println(t21 == t1);//true
        int num1 = 10;
        double num2 = 10.0;
        System.out.println(num1 == num2);//true 基本类型比较，判断的是值

        /*
            String类的equals方法就是重写了Object类的equals方法，变成了比较两个字符串值是否相同
            Object类的equals方法默认比较对象的地址是否相同
            Integer类的equals方法判断两个值是否相同
         */

        Integer i1 = new Integer(1000);
        Integer i2 = new Integer(1000);
        System.out.println(i1 == i2);//false 引用类型判断地址
        System.out.println(i1.equals(i2));//true Integer类的equals()方法用于判断值是否相等

        String str1 = new String("lmy");
        String str2 = new String("lmy");
        System.out.println(str1 == str2);//false
        System.out.println(str1.equals(str2));//true
    }
}


class T2{}

class T1 extends T2{}